/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package besa_adaptado.filtros;

import adaptation.common.filter.FilterAES;
import adaptation.common.filter.FilterResultAES;
import adaptation.common.ProfileAES;
import besa_adaptado.perfiles.PerfilUsuario;
import java.util.List;
import java.util.Map;

/**
 *
 * @author Ayllu
 * Este ejemplo de filtro de usuario tiene en cuenta la experiencia de usuario y de acuerdo a su grado
 * enriquece la consulta con el atributo de experiencia
 */
public class FiltroExperiencia extends FilterAES {

    private String consulta;

    public FiltroExperiencia(String category, List<String> subcategories, String consulta) {
        super(category, subcategories);
        this.consulta = consulta;
    }

    public FiltroExperiencia(String category, String consulta) {
        super(category);
        this.consulta = consulta;
    }

    @Override
    public FilterResultAES doFilter(List<ProfileAES> aList) {
        String nivel = "";

        for (ProfileAES ProfileAES : aList) {
            PerfilUsuario userProfile = (PerfilUsuario) ProfileAES;
            if (ProfileAES.getCategory().equalsIgnoreCase(this.getCategory())) {

                Map<String, Float> info = userProfile.getExperticias();
                if (info.containsKey(consulta)) {
                    float experiencia = info.get(consulta);
                    if (userProfile.getGrado().equals("Pregrado")){
                        experiencia /= 2.0;
                    }else if (userProfile.getGrado().equals("Maestria")){
                        experiencia /= 1.5;
                    }else if (userProfile.getGrado().equals("Doctorado")){
                        experiencia /= 1;
                    }
                    if (experiencia <= 0.3f) {
                        nivel = "Principiante";
                    } else if (experiencia > 0.3f && experiencia <= 0.5f) {
                        nivel = "Medio";
                    } else if (experiencia > 0.5f && experiencia <= 0.7f) {
                        nivel = "Avanzado";
                    } else if (experiencia > 0.7f) {
                        nivel = "Experto";
                    }
                }
            }
        }
        if (nivel.equals("")) {
            nivel = "Para Dummies";
        }
        return new ResultadoFiltro("Experiencia: " + nivel);
    }
}
